<?php
/*
 +-------------------------------------------------------------------------+
 |   Copyright (C) 2007-2008 by p431i7o                                    |
 |   pablito.federico@gmail.com                                            |
 |   http://www.ventiladorcito.net/                                        |
 |                                                                         |
 |   Permission is hereby granted, free of charge, to any person obtaining |
 |   a copy of this software and associated documentation files (the       |
 |   "Software"), to deal in the Software without restriction, including   |
 |   without limitation the rights to use, copy, modify, merge, publish,   |
 |   distribute, sublicense, and/or sell copies of the Software, and to    |
 |   permit persons to whom the Software is furnished to do so, subject to |
 |   the following conditions:                                             |
 |                                                                         |
 |   The above copyright notice and this permission notice shall be        |
 |   included in all copies or substantial portions of the Software.       |
 |                                                                         |
 |   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       |
 |   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    |
 |   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.|
 |   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR     |
 |   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
 |   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
 |   OTHER DEALINGS IN THE SOFTWARE.                                       |
 +-------------------------------------------------------------------------+
 |   Author: Pablo Federico Ruiz Diaz Rios <pablito.federico@gmail.com>    |
 +-------------------------------------------------------------------------+
*/
class Seguridad  extends Model
{
	/**
	 * Constructor de la clase
	 *
	 * @return Seguridad
	 */
	function Seguridad()
	{
		parent::Model();
	}
	/**
	 * Metodo para loguear usuarios
	 *
	 * @param unknown_type $usuario
	 * @param unknown_type $password
	 * @return unknown
	 */
	function login($usuario,$password)
	{
		$result = false;
		/*
		 * Armamos y ejecutamos la consulta para ver si el usuairo existe
		 */
		$sql = "SELECT * FROM usuarios WHERE user = '$usuario' AND password = '"./*md5*/($password)."'";
		$query = $this->db->query($sql);
		
		if($query->num_rows()>0):
		/*
		 * existe por lo tanto buscamos que privilegios tiene
		 */
			$row = $query->row(); //recuperamos solo una fila. (no deberia haber mas no?)
		/*
		 * Guardamos los datos de session que necesitemos recuperar
		 */
			$session_data = array(	'id_usuario'=>$row->id,
									'nombre'=>$row->nombre,
									'apellido'=>$row->apellido,
									'sexo'=>$row->sexo,
									'ultimo_acceso'=>$row->fecha_ultimo_acceso,
									'logged'=>true,
									'privilegios'=>false 
			//privilegios seteamos a false xq luego buscaremos si tiene y si no tiene queda como esta
								 );
		/*
		 * Armamos y ejecutamos la consulta para averiguar que permisos tiene el usuario
		 */
			$sql = "SELECT * FROM usuario_privilegio WHERE id_usuario = $row->id";
			$query2= $this->db->query($sql);
			if($query2->num_rows()>0):
				//tiene privilegios
				foreach($query2->result() as $privilegies):
					$array_privilegies[] = $privilegies; 
					//cada privilegio que tenga lo guardamos en un array(id_usuario,id_permiso)
				endforeach;
				$session_data['privilegios']=$array_privilegies;
				//copiamos el array de privilegios a nuestro array de session
				$this->db->where('id',$row->id);
				$this->db->update('usuarios',array('fecha_ultimo_acceso'=>date("Y-m-d")));
				//actualizamos la ultima fecha de ingreso
			endif;
			$this->session->set_userdata($session_data); 
			//guardamos los datos de la session
			$result=true;
		else:
			//usuario y o pass equivocado
			$result=false;
		endif;
		return $result;
	}//fin del metodo login
	
	function logout()
	{
		/*
		 * @TODO si no esta sesionado devolver false y setear un
		 * mensaje de error que diga que no estaba luego en
		 * sesion
		 */
		$session_data = array(	'nombre'=>'',	
								'apellido'=>'',
								'sexo'=>'',
								'ultimo_acceso'=>'',
								'privilegios'=>'',
								'logged'=>false
							);
		//creamos un array con los datos a borrar
		$this->session->unset_userdata($session_data);
		//y los deseteamos
		return true; 
	}
	
	function tienePrivilegio($esperado) //esperado es una cadena con el nombre de la zona que se quiere acceder
	{
		$actual_privilegio = $this->session->userdata('privilegios');
		if(!is_array($actual_privilegio)):
			//no tiene privilegios
			return false;
		else:
			//tiene privilegios
			$sql = "SELECT * FROM usuarios_privilegios UP WHERE id_usuario = ".$this->userdata('id_usuario');
			$sql .= " INNER JOIN privilegios P ON P.nombre = '$esperado' AND P.id = UP.id_privilegio";
			
			$query = $this->db->query($sql);
			if($query->num_rows() > 0):
				return true; //tiene el privilegio esperado
			else:
				return false; //no lo tiene
			endif;
		endif;
	}
}
?>